﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace ThiTracNghiem
{
    public partial class FormDoiPassword : Form
    {
        public String ConnectionString = "";
        public FormDoiPassword()
        {
            InitializeComponent();
        }

        public static bool ValidateInputPassword(KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                return false;

            if (Char.IsNumber(e.KeyChar))
                return false;

            // Backspace or Space
            if (e.KeyChar == 8)
                return false;

            return true;
        }

        private void btnDoi_Click(object sender, EventArgs e)
        {
            if (txtPassword.Text.Trim().Equals(""))
            {
                MessageBox.Show("Bạn phải nhập mật khẩu hiện tại!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (txtNewPassword.Text.Trim().Equals(""))
            {
                MessageBox.Show("Bạn phải nhập mật khẩu mới!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (txtNewPasswordAgain.Text.Trim().Equals(""))
            {
                MessageBox.Show("Bạn phải nhập đầy đủ các thông tin được yêu cầu!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (!txtNewPasswordAgain.Text.Trim().Equals(txtNewPassword.Text.Trim()))
            {
                MessageBox.Show("Mật khẩu ở (1) và ở (2) phải giống nhau!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            ConnectionString = Program.ConnectionString;
            using (SqlConnection con = new SqlConnection(Program.ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand("SP_PASSWORD", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@old", SqlDbType.Char).Value = txtPassword.Text.Trim();
                    cmd.Parameters.Add("@new", SqlDbType.Char).Value = txtNewPassword.Text.Trim();

                    try
                    {
                        con.Open();
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Đổi mật khẩu thành công", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        int pos = ConnectionString.LastIndexOf("=");
                        ConnectionString = ConnectionString.Substring(0, pos + 1);
                        ConnectionString += txtNewPassword.Text.Trim();
                        Program.ConnectionString = ConnectionString;
                    }
                    catch (SqlException ex)
                    {
                        if (ex.Number == 15151)
                        {
                            MessageBox.Show("Mật khẩu cũ không đúng, vui lòng kiểm tra lại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); 
                        }
                        else
                        {
                            throw new Exception(ex.Message);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Lỗi không xác định.\nChi tiết: " + ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); 
                    }
                }
            }
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            Dispose();
        }

        private void txtPassword_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = ValidateInputPassword(e);
        }

        private void txtNewPassword_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = ValidateInputPassword(e);
        }

        private void txtNewPasswordAgain_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = ValidateInputPassword(e);
        }
    }
}
